Alert Dialog 是 android 設計裡面的對話框,相信有使用過 android 系統的朋友都不陌生
預設的 alert dialog 有五個最基本的屬性設定
Dialog 五個屬性分別對到畫面上的文字是
為了進行測試,我在點選以後會跳出 snackbar 讓我知道我選了什麼,所以挪出一點點時間講一樣 snackbar。
Snackbar 是 material design 包的一部分,所以要先引用他們的依賴包才能做使用。
他們認為,原本 toast 的風格跟 material design 不搭,所以才改用 snackbar。
就是底下那條黑色的。
直接看code。
這是平常在用的 toast:
Toast.makeText(this, "Positive button is clicked.", Toast.LENGTH_SHORT).show()
而這是 snackbar:
Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show()
看起來的確是差不多
使用上要注意的是第一個參數,toast 是 context;snackbar 是 view,不能直接塞 this
進去。
所以上面那個 layout
是我自己把該 activity 畫面最外面的 layout 宣告的
private val layout: ConstraintLayout by lazy { findViewById(R.id.layoutDialog) }
snackbar 還有個特別的地方,它可以加上按鈕。
Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT)
.setAction("OK"){
Toast.makeText(this, "OK is Cilcked", Toast.LENGTH_SHORT).show()
}
.show()
加上了一個有 ok 文字的按鈕,按了再跳出 toast。
繼續來看 dialog
要使用的話,就要使用 dialog builder,記得要加上 show()
方法才會成功。
val builder= AlertDialog.Builder(this).show()
直接啟用,發現什麼東西也沒有出現,但畫面變黑了。
呼叫其方法設定屬性,有需要按鈕點擊監聽器的地方就用 object 做一個 OnClickListener。
val defaultBuilder= AlertDialog.Builder(this)
.setTitle("Test")
.setMessage("Default Alert Dialog")
.setPositiveButton("是", object: DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show()
}
})
.setNeutralButton("取消", object: DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
Snackbar.make(layout, "Neutral button is clicked.", Snackbar.LENGTH_SHORT).show()
}
})
.setNegativeButton("否", object: DialogInterface.OnClickListener{
override fun onClick(p0: DialogInterface?, p1: Int) {
Snackbar.make(layout, "Negative button is clicked.", Snackbar.LENGTH_SHORT).show()
}
})
.show()
以上用 java 的想法做出來的,不過,跟 button 的 OnClickListener 一樣,OnClickListener 可以轉為 lambda 表達式
val defaultBuilder= AlertDialog.Builder(this)
.setTitle("Test")
.setMessage("Default Alert Dialog")
.setPositiveButton("是") { p0, p1 ->
Snackbar.make(layout, "Positive button is clicked.", Snackbar.LENGTH_SHORT).show()
}
.setNeutralButton("取消") { p0, p1 ->
Snackbar.make(layout, "Neutral button is clicked.", Snackbar.LENGTH_SHORT).show()
}
.setNegativeButton("否") { p0, p1 ->
Snackbar.make(layout, "Negative button is clicked.", Snackbar.LENGTH_SHORT).show()
}
.show()
出來的結果是一樣的